home *** CD-ROM | disk | FTP | other *** search
- // main.c
-
- #include <A4Stuff.h>
- #include <Resources.h>
- #include <Windows.h>
- #include <Controls.h>
-
- short gPartCode;
- Boolean gRealFunctionsEnabled = true;
-
- Handle gScrollDefProc;
- Boolean gScrollGoingUp;
- Boolean gKnowScrollDirection = false;
-
- typedef pascal short (*findWindow)(Point thePoint, WindowRef *theWindow);
- findWindow gFindWindowAddr;
- pascal short MyFindWindow(Point thePoint, WindowRef *theWindow);
-
- typedef pascal Boolean (*trackGoAway)(WindowRef theWindow, Point thePt);
- trackGoAway gTrackGoAwayAddr;
- pascal Boolean MyTrackGoAway(WindowRef theWindow, Point thePt);
-
- typedef pascal Boolean (*trackBox)(WindowRef theWindow, Point thePt, short partCode);
- trackBox gTrackBoxAddr;
- pascal Boolean MyTrackBox(WindowRef theWindow, Point thePt, short partCode);
-
- typedef pascal ControlPartCode (*findControl)(Point thePoint, WindowRef theWindow, ControlRef *theControl);
- findControl gFindControlAddr;
- pascal ControlPartCode MyFindControl(Point thePoint, WindowRef theWindow, ControlRef *theControl);
-
- typedef pascal ControlPartCode (*testControl)(ControlRef theControl, Point thePoint);
- testControl gTestControlAddr;
- pascal ControlPartCode MyTestControl(ControlRef theControl, Point thePoint);
-
- ControlPartCode GetChangedPartCode(ControlPartCode part);
-
- typedef pascal void (*hiliteControl)(ControlRef theControl, ControlPartCode hiliteState);
- hiliteControl gHiliteControlAddr;
- pascal void MyHiliteControl(ControlRef theControl, ControlPartCode hiliteState);
-
- typedef pascal void (*setControlValue)(ControlRef theControl, SInt16 newValue);
- setControlValue gSetControlValueAddr;
- pascal void MySetControlValue(ControlRef theControl, SInt16 newValue);
-
- void main(void) {
- Handle init;
-
- EnterCodeResource();
-
- init = Get1Resource('INIT', 0);
- DetachResource(init);
-
- gFindWindowAddr = (findWindow)NGetTrapAddress(_FindWindow, ToolTrap);
- NSetTrapAddress((UniversalProcPtr)MyFindWindow, _FindWindow, ToolTrap);
-
- gTrackGoAwayAddr = (trackGoAway)NGetTrapAddress(_TrackGoAway, ToolTrap);
- NSetTrapAddress((UniversalProcPtr)MyTrackGoAway, _TrackGoAway, ToolTrap);
-
- gTrackBoxAddr = (trackBox)NGetTrapAddress(_TrackBox, ToolTrap);
- NSetTrapAddress((UniversalProcPtr)MyTrackBox, _TrackBox, ToolTrap);
-
- gFindControlAddr = (findControl)NGetTrapAddress(_FindControl, ToolTrap);
- NSetTrapAddress((UniversalProcPtr)MyFindControl, _FindControl, ToolTrap);
-
- gTestControlAddr = (testControl)NGetTrapAddress(_TestControl, ToolTrap);
- NSetTrapAddress((UniversalProcPtr)MyTestControl, _TestControl, ToolTrap);
-
- gHiliteControlAddr = (hiliteControl)NGetTrapAddress(_HiliteControl, ToolTrap);
- NSetTrapAddress((UniversalProcPtr)MyHiliteControl, _HiliteControl, ToolTrap);
- /*
- gSetControlValueAddr = (setControlValue)NGetTrapAddress(_SetControlValue, ToolTrap);
- NSetTrapAddress((UniversalProcPtr)MySetControlValue, _SetControlValue, ToolTrap);
- gScrollDefProc = GetResource('CDEF', 1);
- */
- ExitCodeResource();
- }
-
- pascal short MyFindWindow(Point thePoint, WindowRef *theWindow) {
- short part;
- EnterCodeResource();
-
- part = gFindWindowAddr(thePoint, theWindow);
-
- if (part == inZoomIn || part == inZoomOut) {
- if (GetWindowGoAwayFlag(*theWindow) == true) {
- gRealFunctionsEnabled = false;
- gPartCode = part;
- part = inGoAway;
- }
- }
- else if (part == inGoAway) {
- switch (GetWVariant(*theWindow)) {
- case documentProc: // no zoom box
- case noGrowDocProc:
- case rDocProc:
- break;
- default:
- gRealFunctionsEnabled = false;
- if (GetWindowZoomFlag(theWindow) == true) part = inZoomOut;
- else part = inZoomIn;
- break;
- }
- }
- else if (part == inDrag) {
- if (*theWindow == FrontWindow()) {
- switch (GetWVariant(*theWindow)) {
- case noGrowDocProc: // no grow box
- case zoomNoGrow:
- case movableDBoxProc:
- case rDocProc:
- break;
- default:
- // allow cmd-click in titlebar in finder and windowshade?
- gRealFunctionsEnabled = false;
- part = inGrow;
- break;
- }
- }
- }
- else if (part == inGrow) {
- gRealFunctionsEnabled = false;
- part = inDrag;
- }
-
- ExitCodeResource();
- return part;
- }
-
- pascal Boolean MyTrackGoAway(WindowRef theWindow, Point thePt) {
- Boolean selected;
- EnterCodeResource();
- if (gRealFunctionsEnabled) {
- selected = gTrackGoAwayAddr(theWindow, thePt);
- }
- else { // they clicked in the zoom box
- selected = gTrackBoxAddr(theWindow, thePt, gPartCode);
- gRealFunctionsEnabled = true;
- }
- ExitCodeResource();
- return selected;
- }
-
- pascal Boolean MyTrackBox(WindowRef theWindow, Point thePt, short partCode) {
- Boolean selected;
- EnterCodeResource();
- if (gRealFunctionsEnabled) {
- selected = gTrackBoxAddr(theWindow, thePt, partCode);
- }
- else { // they clicked in the close box
- selected = gTrackGoAwayAddr(theWindow, thePt);
- gRealFunctionsEnabled = true;
- }
- ExitCodeResource();
- return selected;
- }
-
- ControlPartCode GetChangedPartCode(ControlPartCode part) {
- if (part == kControlUpButtonPart) {
- //gScrollGoingUp = false;
- //gKnowScrollDirection = true;
- return kControlDownButtonPart;
- }
- else if (part == kControlDownButtonPart) {
- //gScrollGoingUp = false;
- //gKnowScrollDirection = true;
- return kControlUpButtonPart;
- }
- else if (part == kControlPageUpPart) {
- //gScrollGoingUp = false;
- //gKnowScrollDirection = true;
- return kControlPageDownPart;
- }
- else if (part == kControlPageDownPart) {
- //gScrollGoingUp = true;
- //gKnowScrollDirection = true;
- return kControlPageUpPart;
- }
- else {
- //gKnowScrollDirection = false;
- return part;
- }
- }
-
- pascal ControlPartCode MyFindControl(Point thePoint, WindowRef theWindow, ControlRef *theControl) {
- EnterCodeResource();
-
- ControlPartCode part = GetChangedPartCode(gFindControlAddr(thePoint, theWindow, theControl));
- gRealFunctionsEnabled = false;
-
- ExitCodeResource();
- return part;
- }
-
- pascal ControlPartCode MyTestControl(ControlRef theControl, Point thePoint) {
- EnterCodeResource();
-
- ControlPartCode part = GetChangedPartCode(gTestControlAddr(theControl, thePoint));
- gRealFunctionsEnabled = false;
-
- ExitCodeResource();
- return part;
- }
-
- pascal void MyHiliteControl(ControlRef theControl, ControlPartCode hiliteState) {
- EnterCodeResource();
-
- if (gRealFunctionsEnabled) {
- gHiliteControlAddr(theControl, hiliteState);
- }
- else {
- gHiliteControlAddr(theControl, GetChangedPartCode(hiliteState));
- }
-
- ExitCodeResource();
- }
-
- pascal void MySetControlValue(ControlRef theControl, SInt16 newValue) {
- EnterCodeResource();
-
- ControlHandle control = (ControlHandle)theControl;
- if (gScrollDefProc == (*control)->contrlDefProc) {
- if (gKnowScrollDirection && (gScrollGoingUp && newValue < (*control)->contrlValue || !gScrollGoingUp && newValue > (*control)->contrlValue)) {
- gSetControlValueAddr(control, newValue);
- gKnowScrollDirection = false;
- }
- else { // invert it
- gSetControlValueAddr(control, (*control)->contrlMax - (newValue - (*control)->contrlMin));
- }
- }
- else {
- gSetControlValueAddr(control, newValue);
- }
-
- ExitCodeResource();
- }